home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / demobook / AddDemo.c next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  43.8 KB  |  1,318 lines

  1. /*
  2.  * Copyright 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17.  
  18. /*******************************************************************************
  19.     AddDemo.c
  20.  
  21. *******************************************************************************/
  22.  
  23. #include <stdio.h>
  24. #include <Xm/Xm.h>
  25. #include <X11/Shell.h>
  26. #include <Xm/MenuShell.h>
  27. #include "UxXt.h"
  28.  
  29. #include <Xm/List.h>
  30. #include <Xm/ScrolledW.h>
  31. #include <Xm/SeparatoG.h>
  32. #include <Xm/Label.h>
  33. #include <Xm/PushB.h>
  34. #include <Xm/TextF.h>
  35. #include <Xm/Text.h>
  36. #include <Xm/Form.h>
  37.  
  38. /*******************************************************************************
  39.     Includes, Defines, and Global variables from the Declarations Editor:
  40. *******************************************************************************/
  41.  
  42. #include "exinterfmotif.h"
  43. #include <string.h>
  44. #include "exbookglo.h"
  45. #include "exglobals.h"
  46. #include "exinterf.h"
  47.  
  48. Boolean EditExeFilename;
  49. int EditExePos;
  50.  
  51. /*******************************************************************************
  52.     The definition of the context structure:
  53.     If you create multiple instances of your interface, the context
  54.     structure ensures that your callbacks use the variables for the
  55.     correct instance.
  56.  
  57.     For each Widget in the interface, each argument to the Interface
  58.     function, and each variable in the Instance Specific section of the
  59.     Declarations Editor, there is an entry in the context structure.
  60.     and a #define.  The #define makes the variable name refer to the
  61.     corresponding entry in the context structure.
  62. *******************************************************************************/
  63.  
  64. typedef    struct
  65. {
  66.     Widget    UxNameText;
  67.     Widget    UxDoneButton;
  68.     Widget    UxCancelButton;
  69.     Widget    UxNextButton;
  70.     Widget    UxCommandText;
  71.     Widget    UxAltCommandText;
  72.     Widget    UxHelpFileText;
  73.     Widget    UxWSiconText;
  74.     Widget    UxImageiconText;
  75.     Widget    UxscrolledWindow1;
  76.     Widget    UxExistKeywordList;
  77.     Widget    UxNewKeywordText;
  78.     Widget    UxscrolledWindow2;
  79.     Widget    UxDemoKeywordList;
  80.     Widget    UxExeFileText;
  81.     Widget    UxscrolledWindow3;
  82.     Widget    UxExeFileList;
  83.     Widget    UxDeleteFileButton;
  84.     Widget    UxDeleteKeywordButton;
  85.     Widget    UxEditButton;
  86. } _UxCAddDemo;
  87.  
  88. #define NameText                UxAddDemoContext->UxNameText
  89. #define DoneButton              UxAddDemoContext->UxDoneButton
  90. #define CancelButton            UxAddDemoContext->UxCancelButton
  91. #define NextButton              UxAddDemoContext->UxNextButton
  92. #define CommandText             UxAddDemoContext->UxCommandText
  93. #define AltCommandText             UxAddDemoContext->UxAltCommandText
  94. #define WSiconText              UxAddDemoContext->UxWSiconText
  95. #define HelpFileText              UxAddDemoContext->UxHelpFileText
  96. #define ImageiconText           UxAddDemoContext->UxImageiconText
  97. #define scrolledWindow1         UxAddDemoContext->UxscrolledWindow1
  98. #define ExistKeywordList        UxAddDemoContext->UxExistKeywordList
  99. #define NewKeywordText          UxAddDemoContext->UxNewKeywordText
  100. #define scrolledWindow2         UxAddDemoContext->UxscrolledWindow2
  101. #define DemoKeywordList         UxAddDemoContext->UxDemoKeywordList
  102. #define ExeFileText             UxAddDemoContext->UxExeFileText
  103. #define scrolledWindow3         UxAddDemoContext->UxscrolledWindow3
  104. #define ExeFileList             UxAddDemoContext->UxExeFileList
  105. #define DeleteFileButton        UxAddDemoContext->UxDeleteFileButton
  106. #define DeleteKeywordButton     UxAddDemoContext->UxDeleteKeywordButton
  107. #define EditButton              UxAddDemoContext->UxEditButton
  108.  
  109. static _UxCAddDemo    *UxAddDemoContext;
  110.  
  111. Widget    AddDemo;
  112.  
  113. /*******************************************************************************
  114.     Forward declarations of functions that are defined later in this file.
  115. *******************************************************************************/
  116.  
  117. Widget    create_AddDemo();
  118.  
  119. /*******************************************************************************
  120.     The following are callback functions.
  121. *******************************************************************************/
  122.  
  123. static void    activateCB_DoneButton( UxWidget, UxClientData, UxCallbackArg )
  124.     Widget        UxWidget;
  125.     XtPointer    UxClientData, UxCallbackArg;
  126. {
  127.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  128.  
  129.     UxSaveCtx = UxAddDemoContext;
  130.     UxAddDemoContext = UxContext =
  131.             (_UxCAddDemo *) UxGetContext( UxWidget );
  132.     {
  133.     int exefile_count;
  134.     XmString *exefile_table;
  135.     char *exefile_string;
  136.     struct charlist *charptr, *newcharptr, *prevcharptr;
  137.     Arg args[5];
  138.     int i, n;
  139.     char *tmpstr;
  140.  
  141.         tmpstr = XmTextFieldGetString(NameText);  /* get the name */
  142.     strcpy (ADName.buf, tmpstr);        /* copy it into struct */
  143.         XtFree(tmpstr);                /* free up string */
  144.         tmpstr = XmTextGetString(CommandText);    /* get command */
  145.     strcpy (ADCommand.buf, tmpstr);        /* copy it into struct */
  146.         XtFree(tmpstr);                /* free string */
  147.     ADName.bufpos    = strlen(ADName.buf);    /* give length of both strings */
  148.     ADCommand.bufpos = strlen(ADCommand.buf);
  149.  
  150.     if (ADName.bufpos <= 0) {        /* make sure there's a name */
  151.       sprintf(msgstring, "\nYou must enter a Name.\n");
  152.       DialogType = 1;
  153.       popup_Message();
  154.     }
  155.     else if (ADCommand.bufpos <= 0) {    /* and a command */
  156.       sprintf(msgstring, "\nYou must enter a Command.\n");
  157.       DialogType = 1;
  158.       popup_Message();
  159.     }
  160.     else {
  161.           tmpstr = XmTextGetString(AltCommandText);    /* get alternate command */
  162.       strcpy (ADAltCommand.buf, tmpstr);
  163.           XtFree(tmpstr);
  164.       ADAltCommand.bufpos   = strlen(ADAltCommand.buf);
  165.           tmpstr = XmTextFieldGetString(WSiconText);    /* get icon info */
  166.       strcpy (ADIfile.buf, tmpstr);
  167.           XtFree(tmpstr);
  168.       ADIfile.bufpos   = strlen(ADIfile.buf);
  169.           tmpstr = XmTextFieldGetString(ImageiconText); 
  170.       strcpy (ADIfile2.buf, tmpstr);
  171.           XtFree(tmpstr);
  172.       ADIfile2.bufpos  = strlen(ADIfile2.buf);
  173.           tmpstr = XmTextFieldGetString(HelpFileText);  /* get helpfile info */
  174.       strcpy (ADHfile.buf, tmpstr);
  175.           XtFree(tmpstr);
  176.       ADHfile.bufpos  = strlen(ADHfile.buf);
  177.       GetDemoKeywords();            /* make list of keywords */
  178.  
  179.       n = 0;
  180.       XtSetArg(args[n], XmNitemCount, &exefile_count); n++;
  181.       XtSetArg(args[n], XmNitems, &exefile_table); n++;
  182.       XtGetValues(ExeFileList, args, n);    /* now executable list... */
  183.       if (exefile_count == 0) {        /* if no executables */
  184.         DialogType = 5;                  /* tell them no files were there */
  185.         popup_Question();
  186.         UxWaitForNotify();
  187.         if (WantToEnterFilesFlag == False) { /* they said no, they didn't*/
  188.           if (EF_change) {            /* null out pointers */
  189.             Head_FL = NULL;
  190.             Tail_FL = NULL;
  191.           }
  192.           goto DONE;
  193.         }
  194.       }
  195.       else {
  196.         if (EF_change) {
  197.           Head_FL = NULL;
  198.           Tail_FL = NULL;
  199.           for (i=0; i<exefile_count; i++) {
  200.             exefile_string = extract_first_xms_segment(exefile_table[i]);
  201.             newcharptr = (struct charlist *)malloc(sizeof(struct charlist));
  202.             if (Head_FL == NULL)
  203.           Head_FL = newcharptr;
  204.             else
  205.           Tail_FL->next = newcharptr;
  206.             Tail_FL = newcharptr;
  207.                 Tail_FL->next = NULL;
  208.             Tail_FL->indexflag = 0;
  209.             Tail_FL->str = exefile_string;
  210.           }
  211.         }
  212.  
  213. DONE:        if (EditDemoFlag == 0) {    
  214.           add_demo();
  215.         }
  216.         else {            /* they really added a demo */
  217.           savedemochanges();
  218.           EditDemoFlag = 0;
  219.         }
  220.         charptr = HeadChar;
  221.         while (charptr != NULL) {
  222.           prevcharptr = charptr->next;
  223.           if (charptr->indexflag == 0) free(charptr->str);
  224.           free(charptr);
  225.           charptr = prevcharptr;
  226.         }
  227.         HeadChar = NULL;
  228.         TailChar = NULL;
  229.         Head_FL  = NULL;
  230.         Tail_FL  = NULL;
  231.         WantToEnterFilesFlag = True;
  232.  
  233.         XtVaSetValues( NameText, XmNvalue, "", NULL );
  234.         XtVaSetValues( CommandText, XmNvalue, "", NULL );
  235.         XtVaSetValues( AltCommandText, XmNvalue, "", NULL );
  236.         XtVaSetValues( WSiconText, XmNvalue, "", NULL );
  237.         XtVaSetValues( HelpFileText, XmNvalue, "", NULL );
  238.         XtVaSetValues( ImageiconText, XmNvalue, "", NULL );
  239.         XtVaSetValues( NewKeywordText, XmNvalue, "", NULL );
  240.         XtVaSetValues( ExeFileText, XmNvalue, "", NULL );
  241.         XmListDeselectAllItems(ExistKeywordList);
  242.         XmListSetPos(ExistKeywordList, 1);
  243.         XmListDeleteAllItems(DemoKeywordList);
  244.         XmListDeleteAllItems(ExeFileList);
  245.  
  246.         ADwin = -1;
  247.         UxPopdownInterface(AddDemo);
  248.         InterfaceWinOpen-- ;
  249.             drawscene(0);
  250.       }
  251.     }
  252.     }
  253.     UxAddDemoContext = UxSaveCtx;
  254. }
  255.  
  256. static void    activateCB_CancelButton( UxWidget, UxClientData, UxCallbackArg )
  257.     Widget        UxWidget;
  258.     XtPointer    UxClientData, UxCallbackArg;
  259. {
  260.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  261.  
  262.     UxSaveCtx = UxAddDemoContext;
  263.     UxAddDemoContext = UxContext =
  264.             (_UxCAddDemo *) UxGetContext( UxWidget );
  265.     {
  266.     struct charlist *charptr, *prevcharptr;
  267.  
  268.     charptr = HeadChar;
  269.     while (charptr != NULL) {
  270.       prevcharptr = charptr->next;
  271.       if (charptr->indexflag == 0) free(charptr->str);
  272.       free(charptr);
  273.       charptr = prevcharptr;
  274.     }
  275.     HeadChar = NULL;
  276.     TailChar = NULL;
  277.     Head_FL = NULL;
  278.     Tail_FL = NULL;
  279.     EditDemoFlag = 0;
  280.     XtVaSetValues( NameText, XmNvalue, "", NULL );
  281.     XtVaSetValues( CommandText, XmNvalue, "", NULL );
  282.     XtVaSetValues( AltCommandText, XmNvalue, "", NULL );
  283.     XtVaSetValues( WSiconText, XmNvalue, "", NULL );
  284.     XtVaSetValues( HelpFileText, XmNvalue, "", NULL );
  285.     XtVaSetValues( ImageiconText, XmNvalue, "", NULL );
  286.     XtVaSetValues( NewKeywordText, XmNvalue, "", NULL );
  287.     XtVaSetValues( ExeFileText, XmNvalue, "", NULL );
  288.     XmListDeselectAllItems(ExistKeywordList);
  289.     XmListSetPos(ExistKeywordList, 1);
  290.     XmListDeleteAllItems(DemoKeywordList);
  291.     XmListDeleteAllItems(ExeFileList);
  292.     ADwin = -1;
  293.     UxPopdownInterface(AddDemo);
  294.     InterfaceWinOpen-- ;
  295.         drawscene(0);
  296.     }
  297.     UxAddDemoContext = UxSaveCtx;
  298. }
  299.  
  300. static void    activateCB_NextButton( UxWidget, UxClientData, UxCallbackArg )
  301.     Widget        UxWidget;
  302.     XtPointer    UxClientData, UxCallbackArg;
  303. {
  304.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  305.  
  306.     UxSaveCtx = UxAddDemoContext;
  307.     UxAddDemoContext = UxContext =
  308.             (_UxCAddDemo *) UxGetContext( UxWidget );
  309.     {
  310.     int exefile_count;
  311.     XmString *exefile_table;
  312.     char *exefile_string;
  313.     struct charlist *charptr, *newcharptr, *prevcharptr;
  314.     Arg args[5];
  315.     int i, n;
  316.     char *tmpstr;
  317.  
  318.         tmpstr = XmTextFieldGetString(NameText);
  319.     strcpy (ADName.buf, tmpstr);
  320.         XtFree(tmpstr);
  321.         tmpstr = XmTextGetString(CommandText);
  322.     strcpy (ADCommand.buf, tmpstr);
  323.         XtFree(tmpstr);
  324.     ADName.bufpos    = strlen(ADName.buf);
  325.     ADCommand.bufpos = strlen(ADCommand.buf);
  326.     if (ADName.bufpos <= 0) {
  327.       sprintf(msgstring, "\nYou must enter a Name.\n");
  328.       DialogType = 1;
  329.       popup_Message();
  330.     }
  331.     else if (ADCommand.bufpos <= 0) {
  332.       sprintf(msgstring, "\nYou must enter a Command.\n");
  333.       DialogType = 1;
  334.       popup_Message();
  335.     }
  336.     else {
  337.           tmpstr = XmTextGetString(AltCommandText);
  338.       strcpy (ADAltCommand.buf, tmpstr);
  339.           XtFree(tmpstr);
  340.       ADAltCommand.bufpos   = strlen(ADAltCommand.buf);
  341.           tmpstr = XmTextFieldGetString(WSiconText);
  342.       strcpy (ADIfile.buf, tmpstr);
  343.           XtFree(tmpstr);
  344.       ADIfile.bufpos   = strlen(ADIfile.buf);
  345.           tmpstr = XmTextFieldGetString(ImageiconText);
  346.       strcpy (ADIfile2.buf, tmpstr);
  347.           XtFree(tmpstr);
  348.       ADIfile2.bufpos  = strlen(ADIfile2.buf);
  349.           tmpstr = XmTextFieldGetString(HelpFileText);
  350.       strcpy (ADHfile.buf, tmpstr);
  351.           XtFree(tmpstr);
  352.       ADHfile.bufpos  = strlen(ADHfile.buf);
  353.       GetDemoKeywords();
  354.  
  355.       n = 0;
  356.       XtSetArg(args[n], XmNitemCount, &exefile_count); n++;
  357.       XtSetArg(args[n], XmNitems, &exefile_table); n++;
  358.       XtGetValues(ExeFileList, args, n);
  359. /*      printf("Num Exe Files = %d\n", exefile_count); */
  360.       if (exefile_count == 0) {
  361.         DialogType = 5;
  362.         popup_Question();
  363.         UxWaitForNotify();
  364.         if (WantToEnterFilesFlag == False) {
  365.           if (EF_change) {
  366.             Head_FL = NULL;
  367.             Tail_FL = NULL;
  368.           }
  369.           goto NEXT;
  370.         }
  371.       }
  372.       else {
  373.         if (EF_change) {
  374.           Head_FL = NULL;
  375.           Tail_FL = NULL;
  376. /*          printf("Exe & Data Files = \n"); */
  377.           for (i=0; i<exefile_count; i++) {
  378.             exefile_string = extract_first_xms_segment(exefile_table[i]);
  379. /*            printf("%d  %d  %s\n", exefile_count, i, exefile_string); */
  380.             newcharptr = (struct charlist *)malloc(sizeof(struct charlist) );
  381.             if (Head_FL == NULL)
  382.           Head_FL = newcharptr;
  383.             else
  384.           Tail_FL->next = newcharptr;
  385.             Tail_FL = newcharptr;
  386.                 Tail_FL->next = NULL;
  387.             Tail_FL->indexflag = 0;
  388.             Tail_FL->str = exefile_string;
  389.           }
  390.         }
  391.  
  392. NEXT:        if (EditDemoFlag == 0) {
  393.           add_demo();
  394.           charptr = HeadChar;
  395.           while (charptr != NULL) {
  396.             prevcharptr = charptr->next;
  397.             if (charptr->indexflag == 0) free(charptr->str);
  398.             free(charptr);
  399.             charptr = prevcharptr;
  400.           }
  401.           HeadChar = NULL;
  402.           TailChar = NULL;
  403.           Head_FL = NULL;
  404.           Tail_FL = NULL;
  405.           initadwin();
  406.         }
  407.         WantToEnterFilesFlag = True;
  408.         XtVaSetValues( NameText, XmNvalue, "", NULL );
  409.         XtVaSetValues( CommandText, XmNvalue, "", NULL );
  410.         XtVaSetValues( AltCommandText, XmNvalue, "", NULL );
  411.         XtVaSetValues( WSiconText, XmNvalue, "", NULL );
  412.         XtVaSetValues( HelpFileText, XmNvalue, "", NULL );
  413.         XtVaSetValues( ImageiconText, XmNvalue, "", NULL );
  414.         XtVaSetValues( NewKeywordText, XmNvalue, "", NULL );
  415.         XtVaSetValues( ExeFileText, XmNvalue, "", NULL );
  416.         XmListDeselectAllItems(ExistKeywordList);
  417.         XmListSetPos(ExistKeywordList, 1);
  418.         XtVaSetValues( ExistKeywordList,
  419.             XmNitemCount, ExistKeywordCount,
  420.             RES_CONVERT( XmNitems, ExistKeywordString ),
  421.             NULL );
  422.         XmListDeleteAllItems(DemoKeywordList);
  423.         XmListDeleteAllItems(ExeFileList);
  424.       }
  425.     }
  426.     }
  427.     UxAddDemoContext = UxSaveCtx;
  428. }
  429.  
  430. static void    browseSelectionCB_ExistKeywordList( UxWidget, UxClientData, UxCallbackArg )
  431.     Widget        UxWidget;
  432.     XtPointer    UxClientData, UxCallbackArg;
  433. {
  434.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  435.  
  436.     UxSaveCtx = UxAddDemoContext;
  437.     UxAddDemoContext = UxContext =
  438.             (_UxCAddDemo *) UxGetContext( UxWidget );
  439.     {
  440.     int *pos_list;
  441.     int pos_count;
  442.     int i;
  443.     XmListCallbackStruct *cbs;
  444.  
  445.     cbs = (XmListCallbackStruct *)UxCallbackArg;
  446.         if ( ! (XmListItemExists(DemoKeywordList, cbs->item)) ) {
  447.           XmListAddItem(DemoKeywordList, cbs->item, 0);
  448.           XmListSetBottomPos(DemoKeywordList, 0);
  449.           KW_change = TRUE;
  450.         }
  451.     }
  452.     UxAddDemoContext = UxSaveCtx;
  453. }
  454.  
  455. static void    activateCB_NewKeywordText( UxWidget, UxClientData, UxCallbackArg )
  456.     Widget        UxWidget;
  457.     XtPointer    UxClientData, UxCallbackArg;
  458. {
  459.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  460.  
  461.     UxSaveCtx = UxAddDemoContext;
  462.     UxAddDemoContext = UxContext =
  463.             (_UxCAddDemo *) UxGetContext( UxWidget );
  464.     {
  465.     XmString item;
  466.     ADKey.bufpos = 0;
  467.     bufclear(&ADKey);
  468.     strcpy (ADKey.buf, (char *)XmTextFieldGetString(NewKeywordText));
  469.     ADKey.bufpos = strlen(ADKey.buf);
  470.     if (ADKey.bufpos > 0) {
  471.       item = (XmString)XmStringCreateLtoR(
  472.         ADKey.buf, XmSTRING_DEFAULT_CHARSET);
  473.       if ( ! (XmListItemExists(DemoKeywordList,item)) ) {
  474.         XmListAddItem(DemoKeywordList, item, 0);
  475.         XmListSetBottomPos(DemoKeywordList, 0);
  476.         XtVaSetValues( NewKeywordText, XmNvalue, "", NULL );
  477.         KW_change = TRUE;
  478.       }
  479.     }
  480.     }
  481.     UxAddDemoContext = UxSaveCtx;
  482. }
  483.  
  484. static void    activateCB_ExeFileText( UxWidget, UxClientData, UxCallbackArg )
  485.     Widget        UxWidget;
  486.     XtPointer    UxClientData, UxCallbackArg;
  487. {
  488.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  489.  
  490.     UxSaveCtx = UxAddDemoContext;
  491.     UxAddDemoContext = UxContext =
  492.             (_UxCAddDemo *) UxGetContext( UxWidget );
  493.     {
  494.     char string[255];
  495.     XmString item;
  496.     string[0] = '\0';
  497.     strcat (string, (char *)XmTextFieldGetString(ExeFileText));
  498.     item = (XmString)XmStringCreateLtoR(
  499.       string, XmSTRING_DEFAULT_CHARSET);
  500.     if (strcmp(string,"") != 0) {
  501.       if ( ! (XmListItemExists(ExeFileList,item)) ) {
  502.         if (EditExeFilename) {
  503.           XmListDeletePos(ExeFileList, EditExePos);
  504.           XmListAddItem(ExeFileList, item, EditExePos);
  505.           XmListSetBottomPos(ExeFileList, EditExePos);
  506.           XtVaSetValues( ExeFileText, XmNvalue, "", NULL );
  507.           EditExeFilename = False;
  508.         }
  509.         else {
  510.           XmListAddItem(ExeFileList, item, 0);
  511.           XmListSetBottomPos(ExeFileList, 0);
  512.         }
  513.       }
  514.       EF_change = TRUE;
  515.     }
  516.     }
  517.     UxAddDemoContext = UxSaveCtx;
  518. }
  519.  
  520. static void    activateCB_DeleteFileButton( UxWidget, UxClientData, UxCallbackArg )
  521.     Widget        UxWidget;
  522.     XtPointer    UxClientData, UxCallbackArg;
  523. {
  524.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  525.  
  526.     UxSaveCtx = UxAddDemoContext;
  527.     UxAddDemoContext = UxContext =
  528.             (_UxCAddDemo *) UxGetContext( UxWidget );
  529.     {
  530.     int *pos_list;
  531.     int pos_count;
  532.     while ( XmListGetSelectedPos(
  533.       (ExeFileList), &pos_list, &pos_count) ) {
  534.       XmListDeletePos(ExeFileList, pos_list[0]);
  535.       EF_change = TRUE;
  536.       XtFree((char *)pos_list); 
  537.     }
  538.     }
  539.     UxAddDemoContext = UxSaveCtx;
  540. }
  541.  
  542. static void    activateCB_DeleteKeywordButton( UxWidget, UxClientData, UxCallbackArg )
  543.     Widget        UxWidget;
  544.     XtPointer    UxClientData, UxCallbackArg;
  545. {
  546.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  547.  
  548.     UxSaveCtx = UxAddDemoContext;
  549.     UxAddDemoContext = UxContext =
  550.             (_UxCAddDemo *) UxGetContext( UxWidget );
  551.     {
  552.     int *pos_list;
  553.     int pos_count;
  554.     while ( XmListGetSelectedPos(
  555.       (DemoKeywordList), &pos_list, &pos_count) ) {
  556.       XmListDeletePos(DemoKeywordList, pos_list[0]);
  557.       KW_change = TRUE;
  558.       XtFree((char *)pos_list); 
  559.     }
  560.     }
  561.     UxAddDemoContext = UxSaveCtx;
  562. }
  563.  
  564. static void    activateCB_EditButton( UxWidget, UxClientData, UxCallbackArg )
  565.     Widget        UxWidget;
  566.     XtPointer    UxClientData, UxCallbackArg;
  567. {
  568.     _UxCAddDemo             *UxSaveCtx, *UxContext;
  569.  
  570.     UxSaveCtx = UxAddDemoContext;
  571.     UxAddDemoContext = UxContext =
  572.             (_UxCAddDemo *) UxGetContext( UxWidget );
  573.     {
  574.     int *pos_list;
  575.     int pos_count;
  576.     int pos;
  577.     int edit_count;
  578.     XmString *edit_table;
  579.     char *edit_string;
  580.     Arg args[5];
  581.     int n;
  582.  
  583.     if ( XmListGetSelectedPos(
  584.       (ExeFileList), &pos_list, &pos_count) ) {
  585.       if (pos_count == 1) {
  586.         pos = pos_list[0];
  587.         n = 0;
  588.         XtSetArg(args[n], XmNselectedItemCount, &edit_count); n++;
  589.         XtSetArg(args[n], XmNselectedItems, &edit_table); n++;
  590.         XtGetValues(ExeFileList, args, n);
  591.         edit_string = extract_first_xms_segment(edit_table[0]);
  592.         XtVaSetValues( ExeFileText, XmNvalue, edit_string, NULL );
  593.         XtVaSetValues( ExeFileText, XmNcursorPosition, strlen(edit_string), NULL );
  594.         /* printf("%d  %s\n", edit_count, edit_string); */
  595.         EditExeFilename = True;
  596.         EditExePos = pos;
  597.       }
  598.       XtFree((char *)pos_list);
  599.     }
  600.     }
  601.     UxAddDemoContext = UxSaveCtx;
  602. }
  603.  
  604. /*******************************************************************************
  605.     The 'build_' function creates all the Widgets and X widgets,
  606.     and sets their properties to the values specified in the
  607.     Property Editor.
  608. *******************************************************************************/
  609.  
  610. Widget AddDemo_shell;
  611.  
  612. static Widget    _Uxbuild_AddDemo()
  613. {
  614.  
  615.    Widget form, commandform, altcommform, form2;
  616.    Widget label, sep, sep2;
  617.    int n;
  618.    Arg wargs[10];
  619.  
  620.     AddDemo_shell = XtVaCreatePopupShell( "AddDemo_shell",
  621.             topLevelShellWidgetClass, DBtoplevel,
  622.             XmNx, 425,
  623.             XmNy, 187,
  624.             XmNtitle, "Demo",
  625.             XmNiconName, "AddDemo",
  626.             NULL );
  627.  
  628.    n = 0;
  629.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  630.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  631.    XtSetArg(wargs[n], XmNresizePolicy, XmRESIZE_NONE); n++; 
  632.    XtSetArg (wargs[n], XmNverticalSpacing, 10); n++;
  633.    XtSetArg (wargs[n], XmNhorizontalSpacing, 10); n++;
  634.    AddDemo = XtCreateManagedWidget( "AddDemo", xmFormWidgetClass,
  635.     AddDemo_shell, wargs, n);
  636.  
  637.     UxPutContext( AddDemo, (char *) UxAddDemoContext );
  638.  
  639.    n = 0;
  640.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  641.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  642.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  643.    form = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  644.     AddDemo, wargs, n);
  645.  
  646.    n = 0;
  647.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  648.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  649.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  650.    XtSetArg(wargs[n], XmNrecomputeSize, FALSE); n++;
  651.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  652.    label = XtCreateManagedWidget( "NameLabel", xmLabelWidgetClass, 
  653.     form, wargs, n);
  654.  
  655.    n = 0;
  656.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  657.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  658.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  659.    XtSetArg(wargs[n], XmNleftWidget, label); n++;
  660.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
  661.    XtSetArg(wargs[n], XmNleftWidget, label); n++;
  662.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  663.    XtSetArg(wargs[n], XmNresizeWidth, FALSE); n++;
  664.    XtSetArg(wargs[n], XmNhighlightOnEnter, TRUE); n++;
  665.    NameText = XtCreateManagedWidget( "NameText", xmTextFieldWidgetClass,
  666.     form, wargs, n);
  667.  
  668.     UxPutContext( NameText, (char *) UxAddDemoContext );
  669.  
  670.    n = 0;
  671.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  672.    XtSetArg(wargs[n], XmNtopWidget, form); n++;
  673.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  674.    commandform = XtCreateManagedWidget( "AddDemocommform", xmFormWidgetClass, 
  675.     AddDemo, wargs, n);
  676.  
  677.    n = 0;
  678.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  679.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  680.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  681.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  682.    XtSetArg(wargs[n], XmNrecomputeSize, FALSE); n++;
  683.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  684.    label = XtCreateManagedWidget( "CommandLabel", xmLabelWidgetClass,
  685.     commandform, wargs, n);
  686.  
  687.    n = 0;
  688.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++; 
  689.    XtSetArg(wargs[n], XmNtopWidget, label); n++;
  690.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  691.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  692.    XtSetArg(wargs[n], XmNresizeWidth, FALSE); n++;
  693.    XtSetArg(wargs[n], XmNhighlightOnEnter, TRUE); n++;
  694.    XtSetArg (wargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
  695.    XtSetArg (wargs[n], XmNrows, 3); n++;
  696.    XtSetArg (wargs[n], XmNwidth, 300); n++;
  697.    CommandText = XmCreateScrolledText(commandform, "CommandText", wargs, n);
  698.    XtManageChild(CommandText);
  699.  
  700.     UxPutContext( CommandText, (char *) UxAddDemoContext );
  701.  
  702.    n = 0;
  703.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  704.    XtSetArg(wargs[n], XmNtopWidget, form); n++;
  705.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  706.    XtSetArg(wargs[n], XmNleftWidget, commandform); n++;
  707.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  708.    altcommform = XtCreateManagedWidget( "AddDemoaltcommform",xmFormWidgetClass,
  709.     AddDemo, wargs, n);
  710.  
  711.    n = 0;
  712.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  713.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  714.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  715.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  716.    XtSetArg(wargs[n], XmNrecomputeSize, FALSE); n++;
  717.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  718.    label = XtCreateManagedWidget( "AltCommandLabel", xmLabelWidgetClass,
  719.     altcommform, wargs, n);
  720.  
  721.    n = 0;
  722.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++; 
  723.    XtSetArg(wargs[n], XmNtopWidget, label); n++;
  724.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  725.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  726.    XtSetArg(wargs[n], XmNresizeWidth, FALSE); n++;
  727.    XtSetArg(wargs[n], XmNhighlightOnEnter, TRUE); n++;
  728.    XtSetArg (wargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
  729.    XtSetArg (wargs[n], XmNrows, 3); n++;
  730.    AltCommandText = XmCreateScrolledText(altcommform, "AltCommandText", wargs, n);
  731.    XtManageChild(AltCommandText);
  732.  
  733.     UxPutContext( AltCommandText, (char *) UxAddDemoContext );
  734.  
  735.    n = 0;
  736.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  737.    XtSetArg(wargs[n], XmNtopWidget, commandform); n++;
  738.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  739.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  740.    form = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  741.     AddDemo, wargs, n);
  742.  
  743.    n = 0;
  744.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  745.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  746.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  747.    XtSetArg(wargs[n], XmNrecomputeSize, FALSE); n++;
  748.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  749.    label = XtCreateManagedWidget( "WSiconLabel", xmLabelWidgetClass,
  750.     form, wargs, n);
  751.  
  752.     WSiconText = XtVaCreateManagedWidget( "WSiconText",
  753.             xmTextFieldWidgetClass, form,
  754.             XmNresizeWidth, FALSE,
  755.             XmNhighlightOnEnter, TRUE,
  756.     XmNtopAttachment, XmATTACH_FORM, 
  757.     XmNrightAttachment, XmATTACH_FORM,
  758.     XmNleftAttachment, XmATTACH_WIDGET,
  759.     XmNleftWidget, label,
  760.             NULL );
  761.  
  762.     UxPutContext( WSiconText, (char *) UxAddDemoContext );
  763.  
  764.    n = 0;
  765.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  766.    XtSetArg(wargs[n], XmNtopWidget, form); n++;
  767.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  768.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  769.    form2 = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  770.     AddDemo, wargs, n);
  771.  
  772.    n = 0;
  773.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  774.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  775.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  776.    XtSetArg(wargs[n], XmNrecomputeSize, FALSE); n++;
  777.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  778.    label = XtCreateManagedWidget( "ImageiconLabel", xmLabelWidgetClass,
  779.     form2, wargs, n);
  780.  
  781.     ImageiconText = XtVaCreateManagedWidget( "ImageiconText",
  782.             xmTextFieldWidgetClass, form2,
  783.             XmNresizeWidth, FALSE,
  784.             XmNhighlightOnEnter, TRUE,
  785.     XmNtopAttachment, XmATTACH_FORM, 
  786.     XmNrightAttachment, XmATTACH_FORM,
  787.     XmNleftAttachment, XmATTACH_WIDGET,
  788.     XmNleftWidget, label,
  789.             NULL );
  790.  
  791.     UxPutContext( ImageiconText, (char *) UxAddDemoContext );
  792.  
  793.    n = 0;
  794.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  795.    XtSetArg(wargs[n], XmNtopWidget, form2); n++;
  796.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  797.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  798.    form = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  799.     AddDemo, wargs, n);
  800.  
  801.    n = 0;
  802.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  803.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  804.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  805.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  806.    label = XtCreateManagedWidget( "HelpFileLabel",xmLabelWidgetClass,
  807.     form, wargs, n);
  808.  
  809.    n = 0;
  810.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  811.    XtSetArg(wargs[n], XmNleftWidget, label); n++;
  812.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  813.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  814.    XtSetArg(wargs[n], XmNhighlightOnEnter, TRUE); n++;
  815.    HelpFileText = XtCreateManagedWidget("HelpFileText", xmTextFieldWidgetClass,
  816.     form, wargs, n);
  817.  
  818.    n = 0;
  819.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  820.    XtSetArg(wargs[n], XmNtopWidget, form); n++;
  821.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  822.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  823.    XtSetArg(wargs[n], XmNshadowThickness, 7); n++;
  824.    sep = XtCreateManagedWidget( "separatorGadget2", xmSeparatorGadgetClass,
  825.     AddDemo, wargs, n);
  826.  
  827.    n = 0;
  828.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  829.    XtSetArg(wargs[n], XmNtopWidget, sep); n++;
  830.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  831.    form = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  832.     AddDemo, wargs, n);
  833.  
  834.    n = 0;
  835.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  836.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  837.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  838.    XtSetArg(wargs[n], XmNrecomputeSize, FALSE); n++;
  839.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  840.    label = XtCreateManagedWidget( "ExistKeywordLabel", xmLabelWidgetClass,
  841.     form, wargs, n);
  842.  
  843.     scrolledWindow1 = XtVaCreateManagedWidget( "scrolledWindow1",
  844.             xmScrolledWindowWidgetClass, form,
  845.             RES_CONVERT( XmNbackground, "#7777BB" ),
  846.             XmNvisualPolicy, XmVARIABLE,
  847.             XmNscrollingPolicy, XmAPPLICATION_DEFINED,
  848.             XmNscrollBarDisplayPolicy, XmSTATIC,
  849.             XmNshadowThickness, 0,
  850.     XmNtopAttachment, XmATTACH_WIDGET, 
  851.         XmNtopWidget, label,
  852.     XmNleftAttachment, XmATTACH_FORM,
  853.             NULL );
  854.  
  855.     UxPutContext( scrolledWindow1, (char *) UxAddDemoContext );
  856.  
  857.     ExistKeywordList = XtVaCreateManagedWidget( "ExistKeywordList",
  858.             xmListWidgetClass, scrolledWindow1,
  859.             XmNhighlightOnEnter, FALSE,
  860.             XmNhighlightThickness, 2,
  861.             RES_CONVERT( XmNhighlightColor, "black" ),
  862.             XmNscrollBarDisplayPolicy, XmAS_NEEDED,
  863.             XmNlistSizePolicy, XmCONSTANT,
  864.             XmNvisibleItemCount, 10,
  865.             XmNselectionPolicy, XmBROWSE_SELECT,
  866.             XmNlistMarginWidth, 0,
  867.             XmNlistMarginHeight, 2,
  868.             XmNitemCount, ExistKeywordCount,
  869.             RES_CONVERT( XmNitems, ExistKeywordString ),
  870.             XmNwidth, 230,
  871.             NULL );
  872.  
  873.     UxPutContext( ExistKeywordList, (char *) UxAddDemoContext );
  874.  
  875.    n = 0;
  876.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  877.    XtSetArg(wargs[n], XmNtopWidget, form); n++;
  878.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  879.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  880.    XtSetArg(wargs[n], XmNshadowThickness, 7); n++;
  881.    sep2 = XtCreateManagedWidget( "separatorGadget1", xmSeparatorGadgetClass,
  882.     AddDemo, wargs, n);
  883.  
  884.    n = 0;
  885.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  886.    XtSetArg(wargs[n], XmNtopWidget, sep); n++;
  887.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  888.    XtSetArg(wargs[n], XmNbottomWidget, sep2); n++;
  889.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  890.    XtSetArg(wargs[n], XmNleftWidget, form); n++;
  891.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  892.    form2 = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  893.     AddDemo, wargs, n);
  894.  
  895.    n = 0;
  896.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  897.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  898.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  899.    XtSetArg(wargs[n], XmNrecomputeSize, FALSE); n++;
  900.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  901.    label = XtCreateManagedWidget( "NewKeywordLabel", xmLabelWidgetClass,
  902.     form2, wargs, n);
  903.  
  904.     NewKeywordText = XtVaCreateManagedWidget( "NewKeywordText",
  905.             xmTextFieldWidgetClass, form2,
  906.             XmNresizeWidth, FALSE,
  907.             XmNhighlightOnEnter, TRUE,
  908.     XmNtopAttachment, XmATTACH_WIDGET, 
  909.         XmNtopWidget, label,
  910.     XmNleftAttachment, XmATTACH_FORM,
  911.     XmNrightAttachment, XmATTACH_FORM,
  912.             NULL );
  913.  
  914.     UxPutContext( NewKeywordText, (char *) UxAddDemoContext );
  915.  
  916.    n = 0;
  917.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  918.    XtSetArg(wargs[n], XmNtopWidget, NewKeywordText); n++;
  919.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  920.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  921.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  922.    label = XtCreateManagedWidget( "DemoKeywordLabel", xmLabelWidgetClass,
  923.     form2, wargs, n);
  924.  
  925.     DeleteKeywordButton = XtVaCreateManagedWidget( "DeleteKeywordButton",
  926.             xmPushButtonWidgetClass, form2,
  927.             RES_CONVERT( XmNarmColor, "#9f9f9f" ),
  928.             XmNrecomputeSize, FALSE,
  929.             XmNalignment, XmALIGNMENT_CENTER,
  930.             XmNhighlightOnEnter, TRUE,
  931.     XmNbottomAttachment, XmATTACH_FORM,
  932.     XmNrightAttachment, XmATTACH_FORM,
  933.             NULL );
  934.  
  935.     UxPutContext( DeleteKeywordButton, (char *) UxAddDemoContext );
  936.  
  937.     scrolledWindow2 = XtVaCreateManagedWidget( "scrolledWindow2",
  938.             xmScrolledWindowWidgetClass, form2,
  939.             RES_CONVERT( XmNbackground, "#7777BB" ),
  940.             XmNvisualPolicy, XmVARIABLE,
  941.             XmNscrollingPolicy, XmAPPLICATION_DEFINED,
  942.             XmNscrollBarDisplayPolicy, XmSTATIC,
  943.             XmNshadowThickness, 0,
  944.     XmNtopAttachment, XmATTACH_WIDGET, 
  945.         XmNtopWidget, label,
  946.     XmNleftAttachment, XmATTACH_FORM,
  947.     XmNrightAttachment, XmATTACH_FORM,
  948.     XmNbottomAttachment, XmATTACH_WIDGET, 
  949.         XmNbottomWidget, DeleteKeywordButton,
  950.             NULL );
  951.  
  952.     UxPutContext( scrolledWindow2, (char *) UxAddDemoContext );
  953.  
  954.     DemoKeywordList = XtVaCreateManagedWidget( "DemoKeywordList",
  955.             xmListWidgetClass, scrolledWindow2,
  956.             XmNhighlightOnEnter, FALSE,
  957.             XmNhighlightThickness, 2,
  958.             RES_CONVERT( XmNhighlightColor, "black" ),
  959.             XmNscrollBarDisplayPolicy, XmAS_NEEDED,
  960.             XmNlistSizePolicy, XmCONSTANT,
  961.             XmNselectionPolicy, XmEXTENDED_SELECT,
  962.             XmNlistMarginWidth, 0,
  963.             XmNlistMarginHeight, 2,
  964.             XmNtraversalOn, FALSE,
  965.             NULL );
  966.  
  967.     UxPutContext( DemoKeywordList, (char *) UxAddDemoContext );
  968.  
  969.    n = 0;
  970.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  971.    XtSetArg(wargs[n], XmNtopWidget, sep2); n++;
  972.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  973.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  974.    form = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  975.     AddDemo, wargs, n);
  976.  
  977.    n = 0;
  978.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  979.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  980.    XtSetArg(wargs[n], XmNborderWidth, 0); n++;
  981.    XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  982.    label = XtCreateManagedWidget( "ExeFileLabel", xmLabelWidgetClass,
  983.     form, wargs, n);
  984.  
  985.    n = 0;
  986.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  987.    XtSetArg(wargs[n], XmNtopWidget, label); n++;
  988.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  989.    form2 = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  990.     form, wargs, n);
  991.  
  992.     ExeFileText = XtVaCreateManagedWidget( "ExeFileText",
  993.             xmTextFieldWidgetClass, form2,
  994.             XmNresizeWidth, FALSE,
  995.             XmNcolumns, 55,
  996.             XmNhighlightOnEnter, TRUE,
  997.     XmNtopAttachment, XmATTACH_FORM, 
  998.     XmNleftAttachment, XmATTACH_FORM,
  999.             NULL );
  1000.  
  1001.     UxPutContext( ExeFileText, (char *) UxAddDemoContext );
  1002.  
  1003.     scrolledWindow3 = XtVaCreateManagedWidget( "scrolledWindow3",
  1004.             xmScrolledWindowWidgetClass, form2,
  1005.             RES_CONVERT( XmNbackground, "#7777BB" ),
  1006.             XmNvisualPolicy, XmVARIABLE,
  1007.             XmNscrollingPolicy, XmAPPLICATION_DEFINED,
  1008.             XmNscrollBarDisplayPolicy, XmSTATIC,
  1009.             XmNshadowThickness, 0,
  1010.     XmNtopAttachment, XmATTACH_WIDGET, 
  1011.         XmNtopWidget, ExeFileText,
  1012.     XmNleftAttachment, XmATTACH_FORM,
  1013.     XmNrightAttachment, XmATTACH_FORM,
  1014.             NULL );
  1015.  
  1016.     UxPutContext( scrolledWindow3, (char *) UxAddDemoContext );
  1017.  
  1018.     ExeFileList = XtVaCreateManagedWidget( "ExeFileList",
  1019.             xmListWidgetClass, scrolledWindow3,
  1020.             XmNhighlightOnEnter, FALSE,
  1021.             XmNhighlightThickness, 2,
  1022.             RES_CONVERT( XmNhighlightColor, "black" ),
  1023.             XmNscrollBarDisplayPolicy, XmAS_NEEDED,
  1024.             XmNlistSizePolicy, XmCONSTANT,
  1025.             XmNvisibleItemCount, 4,
  1026.             XmNselectionPolicy, XmEXTENDED_SELECT,
  1027.             XmNlistMarginWidth, 0,
  1028.             XmNlistMarginHeight, 2,
  1029.             XmNtraversalOn, FALSE,
  1030.             NULL );
  1031.  
  1032.     UxPutContext( ExeFileList, (char *) UxAddDemoContext );
  1033.  
  1034.     DeleteFileButton = XtVaCreateManagedWidget( "DeleteFileButton",
  1035.             xmPushButtonWidgetClass, form,
  1036.             RES_CONVERT( XmNarmColor, "#9f9f9f" ),
  1037.             XmNrecomputeSize, FALSE,
  1038.             XmNalignment, XmALIGNMENT_CENTER,
  1039.             XmNhighlightOnEnter, TRUE,
  1040.     XmNbottomAttachment, XmATTACH_FORM, 
  1041.     XmNrightAttachment, XmATTACH_FORM, 
  1042.     XmNleftAttachment, XmATTACH_WIDGET,
  1043.         XmNleftWidget, form2,
  1044.             NULL );
  1045.  
  1046.     UxPutContext( DeleteFileButton, (char *) UxAddDemoContext );
  1047.  
  1048.     EditButton = XtVaCreateManagedWidget( "EditButton",
  1049.             xmPushButtonWidgetClass, form,
  1050.             RES_CONVERT( XmNarmColor, "#9f9f9f" ),
  1051.             XmNrecomputeSize, FALSE,
  1052.             XmNalignment, XmALIGNMENT_CENTER,
  1053.             XmNhighlightOnEnter, TRUE,
  1054.     XmNbottomAttachment, XmATTACH_WIDGET, 
  1055.         XmNbottomWidget, DeleteFileButton,
  1056.     XmNrightAttachment, XmATTACH_FORM, 
  1057.     XmNleftAttachment, XmATTACH_WIDGET,
  1058.         XmNleftWidget, form2,
  1059.             NULL );
  1060.  
  1061.     UxPutContext( EditButton, (char *) UxAddDemoContext );
  1062.  
  1063.    n = 0;
  1064.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1065.    XtSetArg(wargs[n], XmNtopWidget, form); n++;
  1066.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1067.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1068.    XtSetArg(wargs[n], XmNshadowThickness, 7); n++;
  1069.    sep = XtCreateManagedWidget( "separatorGadget3", xmSeparatorGadgetClass,
  1070.     AddDemo, wargs, n);
  1071.  
  1072.    n = 0;
  1073.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1074.    XtSetArg(wargs[n], XmNtopWidget, sep); n++;
  1075.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1076.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1077.    XtSetArg (wargs[n], XmNhorizontalSpacing, 10); n++;
  1078.    form = XtCreateManagedWidget( "AddDemoform", xmFormWidgetClass, 
  1079.     AddDemo, wargs, n);
  1080.  
  1081.     CancelButton = XtVaCreateManagedWidget( "CancelButton",
  1082.             xmPushButtonWidgetClass, form,
  1083.             RES_CONVERT( XmNarmColor, "#9f9f9f" ),
  1084.             XmNrecomputeSize, FALSE,
  1085.             XmNalignment, XmALIGNMENT_CENTER,
  1086.             XmNhighlightOnEnter, TRUE,
  1087.     XmNtopAttachment, XmATTACH_FORM, 
  1088.     XmNbottomAttachment, XmATTACH_FORM, 
  1089.     XmNrightAttachment, XmATTACH_FORM,
  1090.             NULL );
  1091.  
  1092.     UxPutContext( CancelButton, (char *) UxAddDemoContext );
  1093.  
  1094.     DoneButton = XtVaCreateManagedWidget( "DoneButton",
  1095.             xmPushButtonWidgetClass, form,
  1096.             RES_CONVERT( XmNarmColor, "#9f9f9f" ),
  1097.             XmNrecomputeSize, FALSE,
  1098.             XmNalignment, XmALIGNMENT_CENTER,
  1099.             XmNhighlightOnEnter, TRUE,
  1100.     XmNtopAttachment, XmATTACH_FORM, 
  1101.     XmNbottomAttachment, XmATTACH_FORM, 
  1102.     XmNrightAttachment, XmATTACH_WIDGET,
  1103.     XmNrightWidget, CancelButton,
  1104.             NULL );
  1105.  
  1106.     UxPutContext( DoneButton, (char *) UxAddDemoContext );
  1107.  
  1108.     NextButton = XtVaCreateManagedWidget( "NextButton",
  1109.             xmPushButtonWidgetClass, form,
  1110.             RES_CONVERT( XmNarmColor, "#9f9f9f" ),
  1111.             XmNrecomputeSize, FALSE,
  1112.             XmNalignment, XmALIGNMENT_CENTER,
  1113.             XmNhighlightOnEnter, TRUE,
  1114.     XmNtopAttachment, XmATTACH_FORM, 
  1115.     XmNbottomAttachment, XmATTACH_FORM, 
  1116.     XmNrightAttachment, XmATTACH_WIDGET,
  1117.     XmNrightWidget, DoneButton,
  1118.             NULL );
  1119.  
  1120.     UxPutContext( NextButton, (char *) UxAddDemoContext );
  1121.  
  1122.     XtAddCallback( AddDemo, XmNdestroyCallback,
  1123.             UxFreeClientDataCB,
  1124.             (XtPointer) UxAddDemoContext );
  1125.  
  1126.     XtAddCallback( DoneButton, XmNactivateCallback,
  1127.             activateCB_DoneButton,
  1128.             (XtPointer) UxAddDemoContext );
  1129.  
  1130.     XtAddCallback( CancelButton, XmNactivateCallback,
  1131.             activateCB_CancelButton,
  1132.             (XtPointer) UxAddDemoContext );
  1133.  
  1134.     XtAddCallback( NextButton, XmNactivateCallback,
  1135.             activateCB_NextButton,
  1136.             (XtPointer) UxAddDemoContext );
  1137.  
  1138.     XtAddCallback( ExistKeywordList, XmNbrowseSelectionCallback,
  1139.             browseSelectionCB_ExistKeywordList,
  1140.             (XtPointer) UxAddDemoContext );
  1141.  
  1142.     XtAddCallback( NewKeywordText, XmNactivateCallback,
  1143.             activateCB_NewKeywordText,
  1144.             (XtPointer) UxAddDemoContext );
  1145.  
  1146.     XtAddCallback( ExeFileText, XmNactivateCallback,
  1147.             activateCB_ExeFileText,
  1148.             (XtPointer) UxAddDemoContext );
  1149.  
  1150.     XtAddCallback( DeleteFileButton, XmNactivateCallback,
  1151.             activateCB_DeleteFileButton,
  1152.             (XtPointer) UxAddDemoContext );
  1153.  
  1154.     XtAddCallback( DeleteKeywordButton, XmNactivateCallback,
  1155.             activateCB_DeleteKeywordButton,
  1156.             (XtPointer) UxAddDemoContext );
  1157.  
  1158.     XtAddCallback( EditButton, XmNactivateCallback,
  1159.             activateCB_EditButton,
  1160.             (XtPointer) UxAddDemoContext );
  1161.  
  1162.  
  1163.     return ( AddDemo );
  1164. }
  1165.  
  1166. /*******************************************************************************
  1167.     The following function includes the code that was entered
  1168.     in the 'Initial Code' and 'Final Code' sections of the
  1169.     Declarations Editor. This function is called from the
  1170.     'Interface function' below.
  1171. *******************************************************************************/
  1172.  
  1173. static Widget    _Ux_create_AddDemo()
  1174. {
  1175.     Widget                 rtrn;
  1176.     _UxCAddDemo             *UxContext;
  1177.  
  1178.     UxAddDemoContext = UxContext =
  1179.         (_UxCAddDemo *) XtMalloc( sizeof(_UxCAddDemo) );
  1180.  
  1181.     rtrn = _Uxbuild_AddDemo();
  1182.  
  1183.     XtRealizeWidget( AddDemo_shell );
  1184.  
  1185.     SetWMhints ( AddDemo_shell );
  1186.  
  1187.     return(rtrn);
  1188. }
  1189.  
  1190. /*******************************************************************************
  1191.     The following is the 'Interface function' which is the
  1192.     external entry point for creating this interface.
  1193.     This function should be called from your application or from
  1194.     a callback function.
  1195. *******************************************************************************/
  1196.  
  1197. Widget    create_AddDemo()
  1198. {
  1199.     Widget            _Uxrtrn;
  1200.  
  1201.     _Uxrtrn = _Ux_create_AddDemo();
  1202.  
  1203.     return ( _Uxrtrn );
  1204. }
  1205.  
  1206. popup_AddDemo()
  1207. {
  1208.     struct icntmpltstruct *iconptr;
  1209.     char title_string[20];
  1210.  
  1211.     if (EditDemoFlag == 1)
  1212.       strcpy (title_string, "EditingDemo");
  1213.     else
  1214.       strcpy (title_string, "AddDemo");
  1215.     XtVaSetValues( AddDemo_shell,
  1216.             XmNtitle, title_string,
  1217.             NULL );
  1218.  
  1219.     XtVaSetValues( ExistKeywordList,
  1220.             XmNitemCount, ExistKeywordCount,
  1221.             RES_CONVERT( XmNitems, ExistKeywordString ),
  1222.             NULL );
  1223.  
  1224.     if (EditDemoFlag == 1) {
  1225.       iconptr = seliconptr->iconptr;
  1226.       XtVaSetValues( NameText, XmNvalue, iconptr->nameptr->string, NULL);
  1227.       XtVaSetValues( NameText, XmNcursorPosition, strlen(iconptr->nameptr->string), NULL );
  1228.       XtVaSetValues( CommandText, XmNvalue, iconptr->startstring, NULL);
  1229.       XtVaSetValues( CommandText, XmNcursorPosition, strlen(iconptr->startstring), NULL );
  1230.           if (iconptr->alt_command != NULL)
  1231.              {
  1232.       XtVaSetValues( AltCommandText, XmNvalue, iconptr->alt_command, NULL);
  1233.       XtVaSetValues( AltCommandText, XmNcursorPosition, strlen(iconptr->alt_command), NULL );
  1234.              }
  1235.           if (iconptr->helpfile != NULL)
  1236.              {
  1237.       XtVaSetValues(HelpFileText, XmNvalue, iconptr->helpfile->name, NULL);
  1238.       XtVaSetValues(HelpFileText, XmNcursorPosition, strlen(iconptr->helpfile->name), NULL );
  1239.              }
  1240.       if (iconptr->geofile != NULL) {
  1241.         XtVaSetValues( WSiconText, XmNvalue, iconptr->geofile->name, NULL);
  1242.         XtVaSetValues( WSiconText, XmNcursorPosition, strlen(iconptr->geofile->name), NULL );
  1243.       }
  1244.       if (iconptr->imgfile != NULL) {
  1245.         XtVaSetValues( ImageiconText, XmNvalue, iconptr->imgfile->name, NULL);
  1246.         XtVaSetValues( ImageiconText, XmNcursorPosition, strlen(iconptr->imgfile->name), NULL );
  1247.       }
  1248.       if (DemoKeywordCount > 0)
  1249.         XtVaSetValues( DemoKeywordList,
  1250.             XmNitemCount, DemoKeywordCount,
  1251.             RES_CONVERT( XmNitems, DemoKeywordString ),
  1252.             NULL );
  1253.  
  1254.       if (ExeFileCount > 0)
  1255.         XtVaSetValues( ExeFileList,
  1256.             XmNitemCount, ExeFileCount,
  1257.             RES_CONVERT( XmNitems, ExeFileString ),
  1258.             NULL );
  1259.  
  1260.       XtUnmapWidget(NextButton);
  1261.     }
  1262.     else
  1263.       XtMapWidget(NextButton);
  1264.  
  1265.       UxPopupInterface(AddDemo, no_grab);
  1266. }
  1267.  
  1268.  
  1269. GetDemoKeywords()
  1270. {
  1271. int keyword_count;
  1272. XmString *keyword_table;
  1273. char *keyword_string;
  1274. Arg args[5];
  1275. int i, n;
  1276. struct charlist *newcharptr;
  1277.  
  1278.     if (KW_change) {        /* if there's new keywords */
  1279.       n = 0;
  1280.       XtSetArg(args[n], XmNitemCount, &keyword_count); n++; /* how many items in list */
  1281.       XtSetArg(args[n], XmNitems, &keyword_table); n++; /* the list itself */
  1282.       XtGetValues(DemoKeywordList, args, n);    /* fetch the values */
  1283. /*      printf("Num Demo Keywords = %d\n", keyword_count); */
  1284.       HeadChar = NULL;        /* set head and tail to null */
  1285.       TailChar = NULL;
  1286.       if (keyword_count > 0) {    /* only do if there ARE keywords */
  1287. /*        printf("Demo Keywords = \n"); */
  1288.         for (i=0; i<keyword_count; i++) {    /* traverse list */
  1289.           keyword_string = extract_first_xms_segment(keyword_table[i]);
  1290. /*          printf("%d  %s\n", keyword_count, keyword_string); */
  1291.           newcharptr = (struct charlist *)malloc(sizeof(struct charlist) );
  1292.           if (HeadChar == NULL)
  1293.             HeadChar = newcharptr;    /* if no keywords, set both to null */
  1294.           else
  1295.             TailChar->next = newcharptr; /* set tailchar.next */
  1296.               newcharptr->next = NULL;    /* set newcharptr.next to null */
  1297.           TailChar = newcharptr;    /* and set the tail to the keyword */
  1298.           if (find_keyword(keyword_string) != NULL) {
  1299. /*            printf("keyword already exists\n"); */
  1300.             TailChar->indexflag = 1; /* marks it as old */
  1301.         TailChar->str = keyword_string; /* put string in list */
  1302.           }
  1303.           else {            /* if keyword doesn't exist */
  1304.             TailChar->indexflag = 0;/* marks it as new */
  1305.             TailChar->str = (char *)malloc(strlen(keyword_string)+1);
  1306.             strcpy(TailChar->str, keyword_string); /* put it in list */
  1307.           }
  1308. /*          printf("%s\n", TailChar->str); */
  1309.         }
  1310.       }
  1311.     }
  1312. }
  1313.  
  1314. /*******************************************************************************
  1315.     END OF FILE
  1316. *******************************************************************************/
  1317.  
  1318.